#include<bits/stdc++.h>
#define ll long long
using namespace std;

int n,q,ans;
int s[1000005],hd;
int ss[1000005],nt[1000005];
int lt[1000005],res,tmp,tp;
int sum[4000005],mn[4000005];
char t[1000005];
vector<int> adj[1000005];

inline int lc(int k){return k<<1;}

inline int rc(int k){return k<<1|1;}

inline void update(int k)
{
    sum[k]=sum[lc(k)]+sum[rc(k)];
    mn[k]=min(mn[lc(k)]+sum[rc(k)],mn[rc(k)]);
}

inline void build(int k,int l,int r)
{
    if(l==r)
    {
        sum[k]=mn[k]=(t[l]=='1'?1:-1);
        return;
    }

    int mid=(l+r)>>1;

    build(lc(k),l,mid);
    build(rc(k),mid+1,r);

    update(k);
}

inline void add(int k,int l,int r,int pos)
{
    if(!pos)
        return;

    if(l==r)
    {
        sum[k]=mn[k]=0;
        return;
    }

    int mid=(l+r)>>1;

    if(pos<=mid)
        add(lc(k),l,mid,pos);
    else
        add(rc(k),mid+1,r,pos);

    update(k);
}

inline void query(int k,int l,int r,int ql,int qr)
{
    if(ql<=l&&r<=qr)
    {
        res=min(res,mn[k]+tmp);
        tmp+=sum[k];
        return;
    }

    int mid=(l+r)>>1;

    if(mid<qr)
        query(rc(k),mid+1,r,ql,qr);
    if(ql<=mid)
        query(lc(k),l,mid,ql,qr);
}

int main()
{
    freopen("good.in","r",stdin);
    freopen("good.out","w",stdout);
    ios::sync_with_stdio(0);
    cin.tie(0),cout.tie(0);

    cin>>n>>q;
    cin>>(t+1);

    build(1,1,n);

    for(int i=1;i<=n;i++)
    {
        if(t[i]=='1')
            ss[i]=ss[i-1]+1;
        else
            ss[i]=ss[i-1]-1;

        if(t[i]=='1')
            s[++hd]=i;
        else if(hd)
            nt[i]=s[hd--];
        else
            add(1,1,n,i-1);

        if(nt[i])
            lt[nt[i]]=i;
    }

    while(q--)
    {
        int l,r;
        cin>>l>>r;
        adj[l].push_back(r);
    }

    for(int i=1;i<=n;i++)
    {
        for(int r:adj[i])
        {
            res=0x3f3f3f3f,tmp=0;
            query(1,1,n,i,r);
            tp=(tmp-(t[r+1]=='0'&&nt[r+1]<i)+(t[i]=='0'))-(ss[r]-ss[i-1]);
            res-=(t[r+1]=='0'&&nt[r+1]<i);
            ans^=tp+(res<0?-res:0);
        }

        if(lt[i])
            add(1,1,n,lt[i]-1);
    }

    cout<<ans<<'\n';

    return 0;
}
